From 7d898a09578ff6d0bcba65b0d548145c504c1ac6 Mon Sep 17 00:00:00 2001 From: tsteven4 Date: Wed, 14 Feb 2018 08:25:14 -0700 Subject: [PATCH] fix bugs specific to big endian machines (#155) * round up some loose endians in mapbar. * round up another endian, this time in mapsend. * chase the endians out of naviguide. also, a potential bug with Qstring length vs. encoded string length. --- mapbar_track.cc | 11 ++++++++--- mapsend.cc | 2 +- naviguide.cc | 8 ++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/mapbar_track.cc b/mapbar_track.cc index 06851ba7c..34f796a55 100644 --- a/mapbar_track.cc +++ b/mapbar_track.cc @@ -88,9 +88,14 @@ mapbar_track_read() (void) read_datetime(); // start_time currently unused (void) read_datetime(); // end_time currently unused - ushort name[200] = {0}; - gbfread((void*)name, 1, 200, fin); - // At this point, name is a UCS-16 encoded, zero terminated string. + ushort name[101]; + // read 100 UCS-2 characters that are each stored little endian. + // note gbfread wouldn't get this right on big endian machines. + for (int idx=0; idx<100; idx++) { + name[idx] = gbfgetint16(fin); + } + name[100] = 0; + // At this point, name is a UCS-2 encoded, zero terminated string. // All our internals use Qt encoding, so convert now. track->rte_name = QString().fromUtf16(name); diff --git a/mapsend.cc b/mapsend.cc index 37b7be45c..03fed302b 100644 --- a/mapsend.cc +++ b/mapsend.cc @@ -332,7 +332,7 @@ mapsend_waypt_pr(const Waypoint* waypointp) } } - gbfwrite(&c, 1, 1, mapsend_file_out); + gbfputc(c, mapsend_file_out); gbfputc(1, mapsend_file_out); falt = waypointp->altitude; diff --git a/naviguide.cc b/naviguide.cc index 407370a6f..82103fb21 100644 --- a/naviguide.cc +++ b/naviguide.cc @@ -133,8 +133,8 @@ ng_fwrite_wp_data(const QString& s, const QString& d, ng_wp_data_t* wp_data, gbf char z[50]; memset(z, 0, 50); - i = s.length(); - gbfwrite(&i, 1, 1, f); + i = strlen(STRFROMUNICODE(s)); + gbfputc(i, f); gbfwrite(STRFROMUNICODE(s), 1, i, f); gbfwrite(&wp_data->pad1[0], 8, 1, f); @@ -143,8 +143,8 @@ ng_fwrite_wp_data(const QString& s, const QString& d, ng_wp_data_t* wp_data, gbf gbfwrite(&wp_data->pad2[0], 2, 1, f); gbfputint32(wp_data->Alt, f); - i = d.length(); - gbfwrite(&i, 1, 1, f); + i = strlen(STRFROMUNICODE(d)); + gbfputc(i, f); gbfwrite(STRFROMUNICODE(d), 1, i, f); gbfwrite(z, 44, 1, f); } -- 2.30.2